/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package analizador;

/**
 *
 * @author ANIBAL
 */
public class ValidarReal extends AnalizadorLexico {

    private String cadenareal;

    public ValidarReal() {
    }

    public Token validarReal(String cadena) {
        cadenareal = cadena;
        Token token = Token.TokenError;
        char[] arregloCar = cadenareal.toCharArray();//convierte en arreglo de caracteres
        int aux = 0;

        for (int x = 0; x < arregloCar.length; x++) {

            switch (aux) {
                case 0:
                    if (arregloCar[x] == '-') {//si inicia con  "-"
                        aux = 1;
                    } else {
                        if (arregloCar[x] == '.') {//si inicia con  "."
                            aux = 2;
                        } else {
                            if (Character.isDigit(arregloCar[x])) {//si inicia con  "#"
                                aux = 3;
                            } else {
                                return Token.TokenError;
                            }
                        }
                    }
                    break;
                case 1:
                    if (arregloCar[x] == '.') {// ya no repite "." o "-"
                        aux = 4;
                    } else {
                        if (Character.isDigit(arregloCar[x])) {
                            aux = 1;
                        }
                    }
                    break;
                case 2:
                    if (arregloCar[x] == '-' || arregloCar[x] == '.') {//si inicia con "-"
                        return Token.TokenError;
                    } else {
                        if (Character.isDigit(arregloCar[x])) {//si inicia con "#"
                            token = Token.TokenReal;
                            aux = 4;
                        }
                    }
                    break;
                case 3:
                    if (arregloCar[x] == '-') {//un caso si inicia con "-"
                        return Token.TokenError;
                    } else {
                        if (arregloCar[x] == '.') {//cuando inicia con "."
                            aux = 4;
                        } else {
                            if (Character.isDigit(arregloCar[x])) {//cuando inicia con "#"
                                aux = 3;
                            }
                        }
                    }
                    break;
                case 4:
                    if (Character.isDigit(arregloCar[x])) {//cuando inicia con "#"
                        token = Token.TokenReal;
                    } else {
                        return Token.TokenError;
                    }
                    break;
            }
        }
        return token;
    }
}
